// 1.先排序
// 2.取定左边为基点，定义左右两个指针，左边为i+1，右边为数组的长度减1
// 3.每次判断三个数是否相等


var threeSum = function(nums) {
    if(nums.length<3){
        return []
    }
    let arr = []
    //首先就是要排序
    nums = nums.sort((a,b)=>a-b)
    for(let i=0;i<nums.length;i++){
        if( nums[i] === nums[i-1]){//如果这项和上一项相同则跳过
            continue
        }
        //以第i个数为基准 双指针推进
        let left = i+1
        let right = nums.length-1
        while(left<right){
            if(right === i){
                right-- //越过nums【i】
            }else if(nums[i]+nums[left]+nums[right] === 0){
                //命   中
                arr.push([nums[i],nums[left],nums[right]])
                //如果相同的话
                while(nums[left] === nums[left+1]){
                    left++
                }
                left++
                while(nums[right] === nums[right-1]){
                    right--
                }
                right--
            }else if(nums[i]+nums[left]+nums[right]>0){//大了  right需要往左移
                right--
            }else{
                left++
            }
        }
    }
    return arr

};